package trabalho.das.fxml.views.controladores;

import comandos.ComandoApagarEstilo;
import comandos.ComandoEditarEstilo;
import entidades.Cor;
import entidades.Estilo;
import entidades.Familia;
import entidades.Textura;
import java.io.File;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ColorPicker;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import sistema.Sistema;

/**
 * Trabalho DAS - 2014/2015
 *
 * @author a21210380, a21190325, a21210392
 */
public class ControladorVerTodosOsEstilos implements Initializable {

    @FXML
    private TextField nomeEstilo;

    @FXML
    private Label familiaLabel;

    @FXML
    private ColorPicker corLinhaPicker;

    @FXML
    private ColorPicker corTextoPicker;

    @FXML
    private TextField caminhoFicheiro;

    @FXML
    private ListView<Estilo> listaEstilos;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        listaEstilos.getItems().addAll(Sistema.getInstance().getEstilos().values());

        listaEstilos.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends Estilo> observable, Estilo oldValue, Estilo newValue) -> {
            if (newValue != null) {
                nomeEstilo.setText(newValue.getNomeDoEstilo());
                Cor corLinha = newValue.getCorDaLinha();
                Cor corTexto = newValue.getCorDoTexto();
                familiaLabel.setText(newValue.getFamilia().getNome());
                corLinhaPicker.setValue(new Color(corLinha.getRed(), corLinha.getGreen(), corLinha.getBlue(), corLinha.getOpacity()));
                corTextoPicker.setValue(new Color(corTexto.getRed(), corTexto.getGreen(), corTexto.getBlue(), corTexto.getOpacity()));
                caminhoFicheiro.setText(newValue.getFundo().getCaminhoDoFicheiro());
            }
        });
    }

    @FXML
    private void onProcurarFicheiroPressionado(ActionEvent event) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Open Resource File");
        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("All Images", "*.*"),
                new FileChooser.ExtensionFilter("jpg", "*.jpg"),
                new FileChooser.ExtensionFilter("png", "*.png")
        );
        File fileSelected = fileChooser.showOpenDialog(((Stage) nomeEstilo.getScene().getWindow()));
        if (fileSelected == null) {
            System.out.println("No File Selected!");
            return;
        }

        caminhoFicheiro.setText(fileSelected.getAbsolutePath());
    }

    @FXML
    private void onEditarEstiloPressionado(ActionEvent event) {
        if (listaEstilos.getSelectionModel().getSelectedItem() != null) {
            Estilo oldEstilo = listaEstilos.getSelectionModel().getSelectedItem();

            Textura novaTextura = null;
            Cor novaCorLinha = Sistema.getInstance().getCor(corLinhaPicker.getValue().getRed(), corLinhaPicker.getValue().getGreen(), corLinhaPicker.getValue().getBlue(), corLinhaPicker.getValue().getOpacity());
            Cor novaCorTexto = Sistema.getInstance().getCor(corTextoPicker.getValue().getRed(), corTextoPicker.getValue().getGreen(), corTextoPicker.getValue().getBlue(), corTextoPicker.getValue().getOpacity());
            if (!caminhoFicheiro.getText().equals(oldEstilo.getFundo().getCaminhoDoFicheiro())) {
                novaTextura = new Textura(oldEstilo.getFundo().getZ(), caminhoFicheiro.getText());
            } else {
                novaTextura = oldEstilo.getFundo();
            }
            Estilo novoEstilo = new Estilo(oldEstilo.getFamilia(), nomeEstilo.getText(), novaCorLinha, novaCorTexto, novaTextura);

            ComandoEditarEstilo c = new ComandoEditarEstilo(novoEstilo, oldEstilo);
            Sistema.getInstance().getGestorComandos().executeComando(c);
            ((Stage) nomeEstilo.getScene().getWindow()).close();
        }
    }

    @FXML
    private void onEliminarEstiloPressionado(ActionEvent event) {
        if (listaEstilos.getSelectionModel().getSelectedItem() != null) {
            Estilo selectedEstilo = listaEstilos.getSelectionModel().getSelectedItem();
            ComandoApagarEstilo c = new ComandoApagarEstilo(selectedEstilo);
            Sistema.getInstance().getGestorComandos().executeComando(c);
            ((Stage) nomeEstilo.getScene().getWindow()).close();
        }
    }
}
